package com.wl.service.impl;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.wl.dao.Apply_01Mapper;
import com.wl.dao.LoginfoMapper;
import com.wl.entity.Apply_01;
import com.wl.entity.Approve_02;
import com.wl.entity.Loginfo;
import com.wl.service.Apply_01Service;
import com.wl.util.PageData;

@Service
public class Apply_01ServiceImpl implements Apply_01Service {

	// 注入Apply_01Mapper
	@Autowired
	private Apply_01Mapper a01mapper;
	// 注入loginfomapper
	@Autowired
	private LoginfoMapper logmapper;

	/**
	 * 01环节提交给表里增加数据 事务提交 给loginfo表里增加日志
	 * 
	 * @param record
	 * @return
	 */
	@Override
	@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
	public boolean insert(Apply_01 record, Loginfo log) {
		// 调用dao中的增加方法
		a01mapper.insert(record);
		// 调用loginfoMapper中的方法
		logmapper.insert(log);
		return true;
	}

	/**
	 * 根据编号查询数据，用于其他环节审批时展示数据用
	 * 
	 * @param flowid
	 * @return
	 */
	@Override
	public Apply_01 selectByflowid(String flowid) {
		// TODO Auto-generated method stub
		return a01mapper.selectByflowid(flowid);
	}

	/**
	 * 根据flowid修改流程状态，用于驳回的流程再次提交
	 * 
	 * @param record
	 * @return
	 */
	@Override
	@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
	public boolean updateStatusByFlowid(Apply_01 record, Loginfo log) {
		// TODO Auto-generated method stub
		a01mapper.updateStatusByFlowid(record);
		// 调用loginfoMapper中的方法
		logmapper.insert(log);
		return true;
	}

	/**
	 * 按照编号查找该处理人当前未处理流程 分页
	 * 
	 * @param applyno
	 * @return
	 */
	@Override
	public PageData<Apply_01> selectNotHandByName(String applyno, int page, int limit) {
		// 设置起始位置
		int start = 0;
		if (page >= 1) {
			start = (page - 1) * limit;
		}

		// 查询总页数
		int totalCount = a01mapper.selectCountNotHand(applyno);

		// 分页数据
		List<Apply_01> data = a01mapper.selectNotHandByName(applyno, start, limit);

		// 把数据放到封装好的PageData类中
		PageData<Apply_01> pageData = new PageData<Apply_01>(data, totalCount, limit, page);

		// 设置这两个参数和Layui保持一致
		pageData.setCode(0);
		pageData.setMsg("");

		// 返回
		return pageData;
	}

	/**
	 * 根据flowid修改流程状态，用于被驳回的流程
	 * 
	 * @param record
	 * @return
	 */
	@Override
	public boolean updateBackByFlowid(Apply_01 record) {
		// TODO Auto-generated method stub
		return a01mapper.updateBackByFlowid(record);
	}

	/**
	 * 按照编号查找我提交的流程 分页
	 * 
	 * @param applyno
	 * @return
	 */
	@Override
	public PageData<Apply_01> selectMyApplyByName(String applyno, int page, int limit) {
		// 设置起始位置
		int start = 0;
		if (page >= 1) {
			start = (page - 1) * limit;
		}

		// 查询总页数
		int totalCount = a01mapper.selectCountMyApply(applyno);

		// 分页数据
		List<Apply_01> data = a01mapper.selectMyApplyByName(applyno, start, limit);

		// 把数据放到封装好的PageData类中
		PageData<Apply_01> pageData = new PageData<Apply_01>(data, totalCount, limit, page);

		// 设置这两个参数和Layui保持一致
		pageData.setCode(0);
		pageData.setMsg("");

		// 返回
		return pageData;
	}

	/**
	 * 查找所有申请 分页
	 * 
	 * @param applyno
	 * @return
	 */
	@Override
	public PageData<Apply_01> selectAllApply(@Param("page") int page,@Param("limit") int limit) {
		// 设置起始位置
		int start = 0;
		if (page >= 1) {
			start = (page - 1) * limit;
		}

		// 查询总页数
		int totalCount = a01mapper.selectCountAllApply();

		// 分页数据
		List<Apply_01> data = a01mapper.selectAllApply(start, limit);

		// 把数据放到封装好的PageData类中
		PageData<Apply_01> pageData = new PageData<Apply_01>(data, totalCount, limit, page);

		// 设置这两个参数和Layui保持一致
		pageData.setCode(0);
		pageData.setMsg("");

		// 返回
		return pageData;
	}
	
	
	/**
	 * 多条件查询  分页
	 * @param searchflowid 流程编号
	 * @param page 当前页
	 * @param limit 每页记录数
	 * @param searchmaterial 物料编码
	 * @param searchapply 申请人编号
	 * @param searchdept 申请人部门
	 * @param searchdatebegin 时间区间
	 * @param searchdateend 时间区间
	 * @return
	 */
	@Override
	public PageData<Apply_01> selectBySearch(String searchflowid, int page, int limit, String searchmaterial,
			String searchapply, String searchdept, String searchdatebegin, String searchdateend) {
		// 设置起始位置
		int start = 0;
		if (page >= 1) {
			start = (page - 1) * limit;
		}

		// 查询总页数
		int totalCount = a01mapper.selectCountBySearch(searchflowid, searchmaterial, searchapply, searchdept, searchdatebegin, searchdateend);

		// 分页数据
		List<Apply_01> data = a01mapper.selectBySearch(searchflowid, start, limit, searchmaterial, searchapply, searchdept, searchdatebegin, searchdateend);

		// 把数据放到封装好的PageData类中
		PageData<Apply_01> pageData = new PageData<Apply_01>(data, totalCount, limit, page);

		// 设置这两个参数和Layui保持一致
		pageData.setCode(0);
		pageData.setMsg("");

		// 返回
		return pageData;
	}
	
	
	/**
	 * 查询用料申请数量，用于页面展示
	 */
	@Override
	public int getCountByApplyOne() {
		// TODO Auto-generated method stub
		return a01mapper.getCountByApplyOne();
	}
	
	/**
	 * 按照部门查找申请单数  欢迎页面柱状图
	 * @param deptname
	 * @return
	 */
	@Override
	public int getCountByDept(String deptname) {
		// TODO Auto-generated method stub
		return a01mapper.getCountByDept(deptname);
	}
	
	
	/**
	 * 按照部门查找用料总数  欢迎页面环形图
	 * @param deptname
	 * @return
	 */
	@Override
	public int getmetrialCountByDept(String deptname) {
		return a01mapper.getmetrialCountByDept(deptname);
	}
}
